/*******************************************************************************
 * Copyright (c) 2008 Sylvain Sicard.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Lesser Public License v2.1
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * 
 * Contributors:
 *     Sylvain Sicard - initial API and implementation
 ******************************************************************************/
/*
 * Created on 24 oct. 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package fr.jade.console.cmd;

import org.objectweb.fractal.api.Component;

import fr.jade.console.core.AbstractCommand;
import fr.jade.console.core.Command;
import fr.jade.console.core.Environment;
import fr.jade.util.FractalNavigator;

/**
 * @author ssicard
 */
public class Cd extends AbstractCommand implements Command{

  public String getDescription(){
    return "change current component";
  }
  
  public String getHelp(){
    return "cd Go back to root component\n"+
           "cd <path/to/sub/component> Go to sub component\n"+
           "cd .. <path/to/father> Go to super component\n";
  }
  
  public String getName() {
    return "cd";
  }

	public Object execute(String[] args, Environment env) throws Throwable {

		Component target = null;
		
		if(args.length == 1){
			target = (Component) env.getEnvVar("root");
		}else{
		  Component curent = (Component)env.getEnvVar("current");
		  if(args[1].equals("..") && args.length == 3){
		    String path = args[2];
		    target = FractalNavigator.find(curent, path, false);
		  }else{
	      String path = args[1];
	      target = FractalNavigator.find(curent, path, true);
	    }
		}
		if(target != null){
		  env.setEnvVar("current", target);
    }else{
      System.err.println("No such component");
    }
		return null;
	}
	
}
